#include "nouvellenotedialog.h"
#include "ui_nouvellenotedialog.h"
#include "file_util.h"
#include <vector>
#include <string>
#include <iostream>
#include "stdio.h"
#include <QAction>
#include <mainwindow.h>
#include <sys/stat.h>
using namespace std;

NouvelleNoteDialog::NouvelleNoteDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::NouvelleNoteDialog)
{
    ui->setupUi(this);
    ui->matiere->hide();
    this->setWindowTitle("Creer une nouvelle note");
    this->fill_combo_box();
}

NouvelleNoteDialog::~NouvelleNoteDialog()
{
    delete ui;
}

void NouvelleNoteDialog::addNewNote(QString s){
    if(s == "+ Nouveau cours"){
        ui->matiere->show();
        ui->label_2->hide();
        ui->titre->hide();
    }else{
        ui->matiere->hide();
        ui->label_2->show();
        ui->titre->show();
    }
}

void NouvelleNoteDialog::showTitre(QString s){
    if(s != ""){
        ui->label_2->show();
        ui->titre->show();
    }else{
        ui->label_2->hide();
        ui->titre->hide();
    }
}

void NouvelleNoteDialog::checkMatiere(QString s){
    if(s == "" || s == "Merci de renseigner un titre"){
        ui->titre->setStyleSheet("background: red");
    }else{
        ui->titre->setStyleSheet("background: lightgreen");
    }
}

void NouvelleNoteDialog::createNewNote(){
    QString matiere_name = ui->matiere->displayText();
    QString cours_titre = ui->titre->displayText();

    if(cours_titre == "" || cours_titre == "Merci de renseigner un titre"){
        ui->titre->setStyleSheet("background: red");
        ui->titre->setText("Merci de renseigner un titre");
        return;
    }
    if(ui->comboBox->currentIndex() == ui->comboBox->count() - 1){
        matiere_name = ui->matiere->displayText();
    }else{
        matiere_name = ui->comboBox->currentText();
    }
    cout << cours_titre.toStdString() << endl;
    int max = 0;

    vector<string> list_vector = file_util::listDirectory(".notes");
    for (unsigned int i = 0;i < list_vector.size();i++) {
        vector<string> temp = file_util::decompose_file_name(list_vector[i].c_str(),'_');
        if(temp.size() > 0){
            if(temp[0] == matiere_name.toStdString()){
                if(max < atoi(temp[1].c_str())){
                    max = atoi(temp[1].c_str());
                }
            }
        }
    }
    max = max + 1;
    QString fileName =
            tr(".notes/") +
            matiere_name +
            tr("#") +
            cours_titre +
            tr("_") +
            QString::number(max) +
            tr(".txt");

    FILE * file = fopen(fileName.toStdString().c_str(),"w");
    fprintf(file, cours_titre.toStdString().c_str());
    fprintf(file, "\n");
    fclose(file);

    this->hide();
    w = new MainWindow(fileName);
    w->show();
}

void NouvelleNoteDialog::fill_combo_box()
{
    std::vector<string> courses;
    vector<string> list_vector = file_util::listDirectory(".notes");

    if(list_vector.size() > 0){
        ui->label_2->show();
        ui->titre->show();
    }else{
        ui->label_2->hide();
        ui->titre->hide();
    }

    for (unsigned int i = 0;i < list_vector.size();i++) {
        vector<string> temp = file_util::decompose_file_name(list_vector[i].c_str(),'_');
        if(temp.size() == 0 || temp[0] == "") continue;
        vector<string> name_titre = file_util::decompose_file_name(temp[0],'#');
        if(name_titre.size() == 0 || name_titre[0] == "") continue;
        if(std::find(courses.begin(),courses.end(),name_titre[0]) == courses.end())
            courses.push_back(name_titre[0]);
    }

    for(unsigned int j = 0; j < courses.size(); j++){
        ui->comboBox->addItem(tr(courses[j].c_str()));
    }

    if(list_vector.size() == 0){
        ui->matiere->show();
    }

    QAction *new_cour = new QAction(tr("+ Nouveau cours"), ui->comboBox);
    ui->comboBox->addItem(tr("+ Nouveau cours"));
    ui->comboBox->addAction(new_cour);

    connect(ui->comboBox,
            SIGNAL(currentIndexChanged(QString)),
            this,
            SLOT(addNewNote(QString)));

    connect(ui->pushButton,
            SIGNAL(clicked()),
            this,
            SLOT(createNewNote()));

    connect(ui->pushButton_2,
            SIGNAL(clicked()),
            this,
            SLOT(close()));

    connect(ui->matiere,
            SIGNAL(textChanged(QString)),
            this,
            SLOT(showTitre(QString)));

    connect(ui->titre,
            SIGNAL(textChanged(QString)),
            this,
            SLOT(checkMatiere(QString)));
}
